import { getToken, setToken, removeToken, setTimeStamp } from '@/utils/auth'
import { login, getInfo, getUserDetailById } from '@/api/user'
const state = {
  // 状态 将token共享出去
  token: getToken(), // 放到缓存里实现持久化
  // 初始化的时候从缓存里读取状态赋值到初始化状态上
  userInfo: {} // 用户基本资料
}
const mutations = {
  // 更新token
  setToken(state, payload) {
    state.token = payload
    // 将vuex的变化同步到本地缓存
    setToken(payload)
  },
  // 登录后删除token
  removeToken(state) {
    state.token = null // 将token置空
    removeToken()// 同步到本地缓存
  },
  // 获取用户基本信息
  setUserInfo(state, userInfo) {
    state.userInfo = { ...userInfo }
  },
  // 删除用户信息
  removeUserInfo() {
    state.userInfo = {}
  }
}
const actions = {
  // 封装登录的actions
  async login(context, data) {
    // 调用之前封装好的登录接口(需要传入data)
    // 经过响应拦截器的处理之后 这里的res实际上就是 token
    const res = await login(data)
    // 能得到表示登录接口调用成功 也就是意味着你的用户名和密码是正确的
    context.commit('setToken', res) // 调用mutation修改state
    // console.log(res)
    // console.log(state.token)
    setTimeStamp()// 设置时间戳
  },
  // 封装获取用户信息的actions
  async getUserInfo({ commit }) {
    const res = await getInfo()
    const defaultRes = await getUserDetailById(res.userId)// 根据id获取头像
    commit('setUserInfo', { ...res, ...defaultRes }) // 合并
    return res
  },
  // 登出的action
  logout({ commit }) {
    commit('removeToken')
    commit('removeUserInfo')
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}
